import 'reflect-metadata'
import { SetMetadata } from '@nestjs/common'
/**
 * 获取元数据
 */
export class Reflector {
  get(metadataKey, target) {
    return Reflect.getMetadata(metadataKey, target) // 从 target 上获取 metadataKey 元数据
  }

  static createDecorator() {
    function decoratorFactory(metadataValue) {
    /**
     * 如果是类装饰器则只有1个参数: 类本身
     * 如果是方法装饰器则拥有3个参数: 类的原型对象 被装饰的方法名 属性描述符
     */
      // return (target: object | Function, property?: string, descriptor?: PropertyDescriptor) => {
      //   SetMetadata(decoratorFactory, metadataValue)(target, property, descriptor)
      // }

      // SetMetadata 返回的是一个方法装饰器或类装饰器
      return SetMetadata(decoratorFactory, metadataValue)
    }
    return decoratorFactory
  }
}
